#include <iostream>
#include <string>

using namespace std;

/*
- **左值**：既可以放在等号左边，也可以放在等号右边的值。
- **右值**：只能放在等号右边的值。

num = 50 + 60;

50 + 60 = num;

num_1 = val;
val = num_1;

常量 表达式 

n1 + n2 = 80;
80 = 90;



但是引用作为函数的返回值时，返回值是一个左值。

// 返回的是 static 变量的别名
int & num = func(10);

func(10) = 80;

*/

const int & func()
{
    static int sta = 0;

    cout << "sta = " << sta << endl;

    return sta;
}



int main(int argc, char const *argv[])
{
    // 获取 func 内部的 静态变量的 引用
    int & ptr = func();

    // 修改静态变量
    ptr = 8899;

    // 打印静态变量
    func();
    
    /*
    问 为啥需要到第二次调用 func() 的时候 才会变成 7788
        原因是 在func 内部先进行打印 
        再返回 静态变量的 引用
            赋值是赋给静态变量的引用
    */
    func() = 7788;

    func();
    
    return 0;
}
